package com.shujia.common

import org.apache.spark.internal.Logging
import org.apache.spark.sql.SparkSession
import org.slf4j.Logger

/**
 * 封装SparkTool：
 * 1、提供打印日志的logger变量
 * 2、可以接收分区日期参数
 * 3、构建好SparkSession环境
 */
abstract class SparkTool extends Logging {
  val logger: Logger = log
  var dayId: String = _

  def main(args: Array[String]): Unit = {
    if (args.isEmpty) {
      logger.error("请指定一个分区！")
      return
    }

    dayId = args.head

    logger.info(s"当前正在处理的分区：$dayId")

    // 构建SparkSession并开启Hive的支持
    val spark: SparkSession = SparkSession
      .builder()
      .appName(this.getClass.getSimpleName.replace("$", ""))
      .enableHiveSupport()
      .getOrCreate()

    logger.info("#################Spark任务正在运行#################")
    run(spark)
    logger.info("#################Spark任务运行完成#################")

  }

  // 定义一个抽象的run方法，需要子类将具体的逻辑放入run方法中
  def run(spark: SparkSession): Unit
}
